package com.ryskoo.permission.menu.service;

import com.ryskoo.framework.core.bean.QueryMessageDTO;
import com.ryskoo.framework.core.service.IBasicService;
import com.ryskoo.permission.menu.domain.MenuPO;

import java.util.List;

/**
 * @author thq
 */
public interface IMenuService extends IBasicService<MenuPO> {

    /**
     * 根据菜单类型和父菜单查询菜单集合
     *
     * @param menuType 菜单类型  0：平台菜单  1：商户菜单
     * @param parentId 父级菜单id
     * @return 菜单列表 {@link List}&lt;{@link MenuPO}&gt;
     */
    List<MenuPO> getMenus(String menuType, String parentId);

    /**
     * 根据条件查询菜单集合
     *
     * @param queryMessage 统一查询消息 {@link QueryMessageDTO}
     * @return 菜单列表 {@link List}&lt;{@link MenuPO}&gt;
     */
    List<MenuPO> getMenusByQueryMessage(QueryMessageDTO queryMessage);

    /**
     * 查询树形结构菜单，如果是页面级菜单，则包含菜单关联的权限信息
     *
     * @param queryMessage 统一查询消息 {@link QueryMessageDTO}
     * @return 菜单列表 {@link List}&lt;{@link MenuPO}&gt;
     */
    List<MenuPO> getMenuWithPermission(QueryMessageDTO queryMessage);

    /**
     * 根据管理员id获取此管理员可见的菜单列表
     * 菜单列表是包含上下级关系的树形结构
     *
     * @param managerId 管理员id
     * @param menuType  菜单类型  0：平台菜单  1：商户菜单
     * @return 菜单列表 {@link List}&lt;{@link MenuPO}&gt;
     */
    List<MenuPO> getMenuByManagerId(String managerId, int menuType);

    /**
     * 根据角色id获取此管理员可见的菜单列表
     * 菜单列表是包含上下级关系的树形结构
     *
     * @param roleId   角色id
     * @param menuType 菜单类型  0：平台菜单  1：商户菜单
     * @return 菜单列表 {@link List}&lt;{@link MenuPO}&gt;
     */
    List<MenuPO> getMenuTreeByRoleId(String roleId, int menuType);

    /**
     * 根据角色id获取此管理员可见的菜单列表，非树状结构
     *
     * @param roleId   角色id
     * @param menuType 菜单类型  0：平台菜单  1：商户菜单
     * @return 菜单列表 {@link List}&lt;{@link MenuPO}&gt;
     */
    List<MenuPO> getMenuByRoleId(String roleId, int menuType);
}
